﻿using BLevy.Negocio;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace BLevy.UI
{
    public partial class frmCuponesIngresoSalidaConsulta : Form
    {
        public frmCuponesIngresoSalidaConsulta()
        {
            InitializeComponent();
        }

        private void IniciarControles()
        {
            dgvCupones.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;

            txtNroSocio.Enabled = false;
            cmbCobrador.Enabled = false;
            dtpDesde.Enabled = false;
            dtpHasta.Enabled = false;
        }

        private void frmCuponesIngresoSalidaConsulta_Load(object sender, EventArgs e)
        {
            IniciarControles();
            GetCobradores();
            FiltrarForm();
        }

        private void GetCobradores()
        {
            try
            {
                cmbCobrador.ValueMember = "id";
                cmbCobrador.DisplayMember = "apellido";
                cmbCobrador.DataSource = Cobradores.FindAll();
            }
            catch (Exception e)
            {
                MessageBox.Show("Error : " + e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void FiltrarForm()
        {
            string numero_cupon = txtNroCupon.Text == string.Empty ? null : txtNroCupon.Text;
            string numero_certificado = txtNroSocio.Text == string.Empty ? null : txtNroSocio.Text;

            int? cobrador_id = ckbCobrador.Checked ? (int?)cmbCobrador.SelectedValue : null;

            DateTime? desde = ckbFechas.Checked ? (DateTime?)dtpDesde.Value : null;
            DateTime? hasta = ckbFechas.Checked ? (DateTime?)dtpHasta.Value : null;

            try
            {

                var query = (from row in Cobradores.FindAllCondicional(numero_cupon, numero_certificado, cobrador_id, desde, hasta).Take(100)
                             select row).ToList();

                dgvCupones.Rows.Clear();
                foreach (var fila in query)
                {
                    dgvCupones.Rows.Add(fila.cupon.id, fila.cupon.numero,
                        fila.cupon.socio.numero_certificado, fila.cupon.socio.apellido + ", " + fila.cupon.socio.nombres,
                        fila.fecha.ToShortDateString(), fila.cobrador.apellido + ", " + fila.cobrador.nombres, fila.tipo_movimiento);
                }
            }
            catch (Exception e)
            {
                MessageBox.Show("Error : " + e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void ckbCertificado_CheckedChanged(object sender, EventArgs e)
        {
            txtNroSocio.Text = string.Empty;

            if (ckbCertificado.CheckState == CheckState.Checked)
                txtNroSocio.Enabled = true;
            else
                txtNroSocio.Enabled = false;
        }

        private void ckbCobrador_CheckedChanged(object sender, EventArgs e)
        {
            if (cmbCobrador.Items.Count != 0)
            {
                cmbCobrador.SelectedIndex = 0;

                if (ckbCobrador.CheckState == CheckState.Checked)
                    cmbCobrador.Enabled = true;
                else
                    cmbCobrador.Enabled = false;
            }
        }

        private void ckbFechas_CheckedChanged(object sender, EventArgs e)
        {
            if (ckbFechas.CheckState == CheckState.Checked)
            {
                dtpDesde.Enabled = true;
                dtpHasta.Enabled = true;
            }
            else
            {
                dtpHasta.Enabled = false;
                dtpDesde.Enabled = false;
            }
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            FiltrarForm();
        }

        private void txtNroCupon_TextChanged(object sender, EventArgs e)
        {
            FiltrarForm();
        }

        private void txtNroSocio_TextChanged(object sender, EventArgs e)
        {
            FiltrarForm();
        }

        private void txtNroCupon_KeyPress(object sender, KeyPressEventArgs e)
        {
            error.Clear();
            if (!(char.IsNumber(e.KeyChar)) && (e.KeyChar != (char)Keys.Back) && (e.KeyChar != '-'))
            {
                error.SetError(txtNroCupon, "Solo se permiten números en el campo Nro. Cupón.");
                e.Handled = true;
                return;
            }
        }

        private void txtNroSocio_KeyPress(object sender, KeyPressEventArgs e)
        {
            error.Clear();
            if (!(char.IsNumber(e.KeyChar)) && (e.KeyChar != (char)Keys.Back))
            {
                error.SetError(ckbCertificado, "Solo se permiten números en el campo Nro. Socio.");
                e.Handled = true;
                return;
            }
        }

        private void btnSalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }


    }
}
